import 'package:common_utils/common_utils.dart';
import 'package:sp_util/sp_util.dart';

import '../models/login_model.dart';

class DataUtils {
  // 全局访问接入点
  static final DataUtils _instance = DataUtils._internal();

  factory DataUtils() {
    return _instance;
  }

  DataUtils._internal();

  // 登录的用户信息
  late LoginModel loginModel = LoginModel.fromJson(
      (ObjectUtil.isEmpty(SpUtil.getObject("LoginResponse")) ? {} : SpUtil.getObject("LoginResponse") as Map<String, dynamic>));

  // 保存登录的用户信息
  Future<void> saveUserInfo(LoginModel loginResponse) async {
    await SpUtil.putObject("LoginResponse", loginResponse.toJson());
    loginModel = LoginModel.fromJson(SpUtil.getObject("LoginResponse") as Map<String, dynamic>);
  }

  // 删除登录信息
  Future<bool> removeUserInfo() async {
    bool isSuccess = await SpUtil.remove('LoginResponse') ?? false;
    return isSuccess;
  }

  // 获取登录用户信息模型
  LoginModel getLoginModel() {
    // 每次都从存储中获取最新的数据，而不是使用缓存的实例
    Map<String, dynamic> data = ObjectUtil.isEmpty(SpUtil.getObject("LoginResponse"))
        ? {}
        : SpUtil.getObject("LoginResponse") as Map<String, dynamic>;
    loginModel = LoginModel.fromJson(data);
    return loginModel;
  }

  // 清除饮水数据
  void clearWaterData() {
    SpUtil.remove("water_count");
  }

  // 清除所有数据
  Future<void> removeAllData() async {
    await removeUserInfo();
    clearWaterData();

    // 重置内存中的登录模型
    loginModel = LoginModel();
  }
}